package 二叉树;

import java.util.ArrayList;
import java.util.List;

public class No129求根到叶子节点数字之和 {

    /**
     * 给定一个二叉树，它的每个结点都存放一个 0-9 的数字，每条从根到叶子节点的路径都代表一个数字。
     *
     * 例如，从根到叶子节点路径 1->2->3 代表数字 123。
     *
     * 计算从根到叶子节点生成的所有数字之和。
     *
     * 说明: 叶子节点是指没有子节点的节点。
     *
     * 示例 1:
     *
     * 输入: [1,2,3]
     *     1
     *    / \
     *   2   3
     * 输出: 25
     * 解释:
     * 从根到叶子节点路径 1->2 代表数字 12.
     * 从根到叶子节点路径 1->3 代表数字 13.
     * 因此，数字总和 = 12 + 13 = 25.
     */

    Integer sum=0;

    public int sumNumbers(TreeNode root) {
        dg(root,0);
        return sum;
    }

    private void dg(TreeNode node,Integer number){
        if(node==null)
            return;
        number=number*10+node.val;
        if(node.left==null&&node.right==null){
            sum+=number;
            return;
        }
        dg(node.left,number);
        dg(node.right,number);
    }

    public static void main(String[] args) {
        No129求根到叶子节点数字之和 n=new No129求根到叶子节点数字之和();
        TreeNode nodeByArr = TreeNode.getNodeByArr(new Integer[]{1, 2, 3});
        int i = n.sumNumbers(nodeByArr);
        System.out.println(i);
    }

}
